public class T1 {
    //成员变量统计能够达到的黑色瓷砖个数
    static int ans=0;
    public static void main(String[] args) {
        //输入
        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        int m = scan.nextInt();
        char [][] c = new char[n][m];
        for(int i=0;i<n;i++) {
            c[i] = scan.next().toCharArray();//将字符串转为字符数组
        }
        //判断
        for(int i=0;i<n;i++) {
            for(int j=0;j<m;j++) {
                if(c[i][j]=='@') {
                    dfs(i,j,c);
                }
            }
        }
        //输出
        System.out.println(ans);
    }

    //dfs的实现
    public static void dfs(int x,int y,char[][] c) {
        ans++;
        //为了避免重复计算,没统计一个就把这块砖变为红色
        c[x][y] = '#';
        //定义dx和dy递归去判断周围的瓷砖
        //dx和dy每一组代表一个方向的移动(1,0就代表向上移动)
        int[] dx= {1,-1,0,0};
        int[] dy= {0,0,1,-1};
        for(int i=0;i<4;i++) {
            int x1 = x + dx[i];
            int y1 = y + dy[i];
            //越界或者为红瓷砖就跳过(注意要加=)
            //c.length代表数组的行数 x
            //c[0].length代表一行的宽度 y
            if(x1<0||x1>=c.length||y1<0||y1>=c[0].length||c[x1][y1]!='.')
                continue;
            //否则才进行递归
            dfs(x1,y1,c);
        }
    }
}
